package d10_homework;

import java.io.*;
import java.net.Socket;

//1、继承Thread类
public class ListenClientThread extends Thread {

    //3、定义一个变量,接受服务端与客户端接通的管道
    private Socket socket;

    //4、使用构造器,进行初始化
    public ListenClientThread(Socket socket) {
        this.socket = socket;
    }


    //2、重写run()方法,指明线程要实现的事情

    @Override
    public void run() {

        //假设用户退出了

            //5、使用socket,获取socket输入流管道
            try {

                InputStream os = socket.getInputStream();
                //6、将低级的管道包装成高级的特殊数据流输入管道-->用于接受客户端的请求
                //使用缓冲字符输入与字符输出,进行文件的读取
                DataInputStream dis = new DataInputStream(os);

                //9、回复对方 -->利用socket获取一个输出管道-->并包装成特殊数据输出流
                DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
                while (true) {
                    //7、进行读取,客户端发送的请求
                    String message = dis.readUTF();
                    //添加一个退出机制


                    //8、获取对方的ip与端口,并输出请求信息,在console

                    System.out.println(socket.getInetAddress() + ": " +
                            socket.getPort() + "发送了" + message);

                    //10、进行发送反馈
                    dos.writeUTF("欢迎光临,请上传文件(文本文件)");
                    //12、开始接受客户端上传的文件
                    String message1 = dis.readUTF();
                    System.out.println(socket.getInetAddress() + ": " +
                            socket.getPort() + "发送了" + message1);

                    //11、独立功能独立成方法-->调用方法,保存文件到本地
                    String rs = saveFile(message1);

                    dos.writeUTF(rs);
                    System.out.println("------------------");
                }
            } catch (Exception e) {
                //下线逻辑
                System.out.println(socket.getInetAddress().getHostAddress() + ":" +
                socket.getPort() + "下线了~~");
                e.printStackTrace();//打印堆栈的信息

            }
        }


    private String saveFile(String message) throws IOException {
        //1、在创建一个文件路径用于保存
        File file = new File("javapromax\\day13-net\\src\\陈某_" + System.currentTimeMillis() + ".txt");
        //2、创建一个缓冲字符输出流
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));

        //3、首先对数据进行处理
        String message1 = message.replace("操", "*");

        //4、进行输出保存
        //首先定义一个字符数组
        bufferedWriter.write(message1);
        //关闭不管道
        bufferedWriter.close();
        return "文件上传成功";
    }
}
